package com.csi.mapper;

import com.csi.domain.*;
import org.apache.ibatis.annotations.MapKey;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;

import java.util.List;
import java.util.Map;

public interface HotelMapper{

    /**
     * 热门酒店
     * @return
     */
    List<Hotel> hotHotel();

    /**
     * 查询全部
     * @return
     */
    List<Hotel> findAll();

    /**
     * 根据城市名称、入住日、离店日、入住人数模糊查询
     * @param peopleNum 入住人数
     * @param city_location 城市名称
     * @param check_time 入住日
     * @param leave_time 离店日
     * @return 返回有空闲房间的酒店信息
     */
    List<Hotel> like4book(@Param("people_num") Integer peopleNum,
                          @Param("city_location") String city_location,
                          @Param("check_time") String check_time,
                          @Param("leave_time") String leave_time);
    /**
     * 查询酒店详情页面内容
     * @param hotelId 酒店id
     * @return Map<String,Object>
     */
    Map<String, Object> findHotelListById(long hotelId);
    /**
     * 查询酒店设施页面内容
     * @param hotelId 酒店id
     * @return List<FacilityInfo>
     */
    List<FacilityInfo> findHotelFacilities(long hotelId);

    @MapKey("id")
    List<Map<String, Object>> findRoomTypeById(@Param("hotelId") long hotelId, @Param("checkTime") String checkTime, @Param("leaveTime") String leaveTime);

    List<FacilityInfo> findRoomFacilitiesById(Long id);

    int save(Hotel hotel);

    int saveLocation(HotelLocation hotelLocation);

    int saveHotelAudit(@Param("hotelId") long id, @Param("waitAuditStatus") String waitAuditStatus);

    List<Hotel> findHotelByCity(String cityName);

    List<RoomType> findAllRoomType(long hotelId);

    List<Map<String, Object>> findHotelByUserId(long userId);

    List<Map<String, Object>> findBillByLike(@Param("userId") long userId,@Param("status") String status);

    String findHotelNameById(long hotelId);

    /**
     * 特价酒店
     * @return
     */
    List<Hotel> discountedhotel();

    void generateEmployee(Employee employee);

    void insertRole(Role role);
}
